/**
 * Trabajo de Ingeniería de Software 2
 * Año 2008
 * Sistema de Reserva de Recursos.
 * Desarrolladores: - Marcelo Ferreira.
 *                  - Christian Gómez.
 *                  - Marcelo Rodas.
 */

package modelo;

import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.EmbeddedId;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

/**
* Clase Entidad Permisorol (JPA)
* @author cgomez
*/
@Entity
@Table(name = "permisorol")
@NamedQueries({@NamedQuery(name = "Permisorol.findByIdRol", query = "SELECT p FROM Permisorol p WHERE p.permisorolPK.idRol = :idRol"), @NamedQuery(name = "Permisorol.findByIdPermiso", query = "SELECT p FROM Permisorol p WHERE p.permisorolPK.idPermiso = :idPermiso"), @NamedQuery(name = "Permisorol.findByHabilitado", query = "SELECT p FROM Permisorol p WHERE p.habilitado = :habilitado"), @NamedQuery(name = "Permisorol.findByFechaAsignacion", query = "SELECT p FROM Permisorol p WHERE p.fechaAsignacion = :fechaAsignacion")})
public class Permisorol implements Serializable {
    private static final long serialVersionUID = 1L;
    @EmbeddedId
    protected PermisorolPK permisorolPK;
    @Column(name = "habilitado", nullable = false)
    private boolean habilitado;
    @Column(name = "fechaAsignacion", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date fechaAsignacion;
    @JoinColumn(name = "idPermiso", referencedColumnName = "idPermiso", insertable = false, updatable = false)
    @ManyToOne
    private Permiso permiso;
    @JoinColumn(name = "idRol", referencedColumnName = "idRol", insertable = false, updatable = false)
    @ManyToOne
    private Rol rol;
    
    /**
     * Crea una nueva instancia de Permisorol
     */ 
    public Permisorol() {
    }
    /**
     * Crea una nueva instancia de Permisorol con valores especificos
     * @param permisorolPK El permisorolPK de Permisorol
     */
    public Permisorol(PermisorolPK permisorolPK) {
        this.permisorolPK = permisorolPK;
    }
    /**
     * Crea una nueva instancia de Permisorol con valores especificos
     * @param permisorolPK El permisorolPK de Permisorol
     * @param habilitado El identificador habilitado de Permisorol
     * @param fechaAsignacion El identificador fechaAsignacion de Permisorol
     */
    public Permisorol(PermisorolPK permisorolPK, boolean habilitado, Date fechaAsignacion) {
        this.permisorolPK = permisorolPK;
        this.habilitado = habilitado;
        this.fechaAsignacion = fechaAsignacion;
    }
    /**
     * Crea una nueva instancia de Permisorol con valores especificos
     * @param idRol El identificador idRol de Permisorol
     * @param idPermiso El identificador idPermiso de Permisorol
     */
    public Permisorol(int idRol, int idPermiso) {
        this.permisorolPK = new PermisorolPK(idRol, idPermiso);
    }
    
    /**
     * Obtiene el permisorolPK de Permisorol
     * @return El permisorolPK de Permisorol
     */
    public PermisorolPK getPermisorolPK() {
        return permisorolPK;
    }
    
    /**
     * Fija el identificador permisorolPK de Permisorol al valor especificado
     * @param permisorolPK El identificador permisorolPK de Permisorol
     */
    public void setPermisorolPK(PermisorolPK permisorolPK) {
        this.permisorolPK = permisorolPK;
    }
    /**
     * Obtiene el habilitado de Permisorol
     * @return El habilitado de Permisorol
     */
    public boolean getHabilitado() {
        return habilitado;
    }
    /**
     * Fija el identificador habilitado de Permisorol al valor especificado
     * @param habilitado El identificador habilitado de Permisorol
     */
    public void setHabilitado(boolean habilitado) {
        this.habilitado = habilitado;
    }
    /**
     * Obtiene el habilitado de Permisorol
     * @return El habilitado de Permisorol
     */
    public Date getFechaAsignacion() {
        return fechaAsignacion;
    }
    /**
     * Fija la fecha de asignacion
     * @param fechaAsignacion La fecha de Asignación
     */
    public void setFechaAsignacion(Date fechaAsignacion) {
        this.fechaAsignacion = fechaAsignacion;
    }
    /**
     * Obtiene el objeto permiso de Permisorol
     * @return El objeto permiso de Permisorol
     */
    public Permiso getPermiso() {
        return permiso;
    }
    /**
     * Fija el identificador permiso de Permisorol al valor especificado
     * @param permiso El identificador permiso de Permisorol
     */
    public void setPermiso(Permiso permiso) {
        this.permiso = permiso;
    }
    /**
     * Obtiene el rol de Permisorol
     * @return El rol de Permisorol
     */
    public Rol getRol() {
        return rol;
    }
    /**
     * Fija el identificador rol de Permisorol al valor especificado
     * @param rol El identificador rol de Permisorol
     */
    public void setRol(Rol rol) {
        this.rol = rol;
    }
    /**
     * Retorna un valor de Hash para el objeto.
     * Esta implementacion evalua un valor hash basado sobre los campos id en este objeto
     * @return Un valor de hash para este objeto
     */
    @Override
    public int hashCode() {
        int hash = 0;
        hash += (permisorolPK != null ? permisorolPK.hashCode() : 0);
        return hash;
    }
    /**
     * Determina si otro objeto es igual a Permisorol. El resultado es
     * <code>true</code> si y solo si el argumento no es nulo y es un objeto Permisorol
     * que tiene el mismo valor del campo id en este objeto.
     * @param object La referencia objeto con el cual comparar
     * @return <code>true</code> Si este objeto es la misma que su argumento;
     * <code>false</code> si no lo es.
     */
    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof Permisorol)) {
            return false;
        }
        Permisorol other = (Permisorol) object;
        if ((this.permisorolPK == null && other.permisorolPK != null) || (this.permisorolPK != null && !this.permisorolPK.equals(other.permisorolPK))) {
            return false;
        }
        return true;
    }
    
    /**
     * Retorna una representacion String de este objeto.  Esta implementacion This implementation construye
     * la representacion basada en los campos.
     * @return Una representacion String del objeto.
     */
    @Override
    public String toString() {
        return "entidades.Permisorol[permisorolPK=" + permisorolPK + "]";
    }

}
